package com.atguigu.reflect;

public class Demo05Method {

//    @Test
//    public void testMethod() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
//        // 测试目标：获取 Method 对象并通过 Method 对象调用对应的方法
//        // 1、获取一个有参数的方法
//        Method setTigerNameMethod =
//                Tiger.class.getDeclaredMethod("setTigerName", String.class);
//        System.out.println("setTigerNameMethod = " + setTigerNameMethod);
//
//        // 2、调用这个有参数的方法
//        // 注意：非静态方法需要由对象来调用
//        Tiger tiger = new Tiger();
//        setTigerNameMethod.invoke(tiger, "good Tiger2024");
//
//        // 3、打印 Tiger 对象
//        System.out.println("tiger = " + tiger);
//    }
//
//    @Test
//    public void testMethodWithReturnValue() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
//        // 测试目标：通过反射调用一个方法并获取方法的返回值
//        // 1、获取代表方法的 Method 对象
//        Method getTigerNameMethod = Tiger.class.getDeclaredMethod("getTigerName");
//
//        // 2、通过 Method 对象调用目标方法
//        Tiger tiger = new Tiger(10, "happy tiger", 66666.66);
//        Object returnValue = getTigerNameMethod.invoke(tiger);
//        System.out.println("returnValue = " + returnValue);
//    }
//
//    @Test
//    public void testInvokeStaticMethod() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
//        // 测试目标：通过反射调用静态方法
//        Method method = Tiger.class.getDeclaredMethod("showName");
//
//        // 调用静态方法不需要对象，所以第一个参数这里传入 null 值即可
//        method.invoke(null);
//    }
}
